In Ruby, una chiamata a un metodo non è un salto statico a un indirizzo di memoria; è un evento di passaggio del messaggio. Quando invochi un metodo, stai inviando un messaggio a un destinatario. Questo messaggio è composto dal nome del metodo, dagli argomenti opzionali e da un possibile associazione blocco.
1. Sintassi della chiamata e ambiguità
Ruby consente una grande flessibilità: Foo.Bar e Foo.Bar() sono identici. Tuttavia, Foo::Bar si riferisce di solito a una costante, mentre Foo::Bar() forza una chiamata al metodo. Le parentesi vengono spesso omesse per creare esperienze simili a DSL in cui i metodi sembrano proprietà.
2. Scomposizione degli operatori
Gli operatori sono in realtà metodi ridefinibili. L'espressione expr1 + expr2 è zucchero sintattico per (expr1).+(expr2). Questo vale per gli operatori unari (-obj), binari (a < b), e operatori suffissi.
3. Il meccanismo yield
I metodi usano yield per spostare il flusso di controllo nel blocco associato. Usando Kernel.block_given?, un metodo può decidere dinamicamente come gestire la logica in base al contesto del chiamante.